package com.example.demo.common;

import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.util.UUID;

/**
 * @Author :蕉绿
 * @Date : 2023/3/21 19:13
 * @Version : V1.0
 * @Description :
 */
public class PasswordUtils {

    //1.加盐并生成密码
    public static String encrypt(String password) {
        //盐值(32尾)
        String salt = UUID.randomUUID().toString().replace("-","");
        //生成加盐之后的密码
        String saltPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        //生成最终密码(保存到数据库里的密码) [约定的格式: 32盐值+$+32位加盐后的密码]
        String finalPassword = salt + "$" +saltPassword;
        return finalPassword;
    }


    //2.生成加盐的密码(1的重载)
    public static String encrypt(String password,String salt) {
        //1.生成一个加盐后的密码
        String saltPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        //2.生成最终的密码
        String finalPassword = salt + "$" +saltPassword;
        return finalPassword;
    }

    //3.验证密码

    public static boolean check(String inputPassword,String finalPassword) {
        if(StringUtils.hasLength(inputPassword) && StringUtils.hasLength(finalPassword) &&
           finalPassword.length() == 65) {
                //1.得到盐值
            String salt = finalPassword.split("\\$")[0];
            //2.使用之前的加密方式 将明文密码和已经得到的盐值进行加密,生成最终密码
            String confirmPassword = PasswordUtils.encrypt(inputPassword,salt);
            //3.对比两个密码是否相同
            return confirmPassword.equals(finalPassword);
        }

        return false;
    }


    public static void main(String[] args) {
        String inputPassword = "123";
        System.out.println(PasswordUtils.encrypt(inputPassword));

    }

}
